home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / fdimg / oh!.2hd / OH!DEN_B.LZH / TOOLS / CDC / CDCSRC.LZH / CDRT.S < prev    next >
Text File  |  1995-03-20  |  24KB  |  968 lines

  1.  
  2. tr5s:
  3.     cmpi.w    #$40,d0
  4.     bcs    @f
  5.     moveq    #-1,d0    *コール無し
  6.     rte
  7. @@:    movem.l    d1-d7/a0-a6,-(sp)
  8.     add.w    d0,d0
  9.     add.w    d0,d0
  10.     lea    tr5tabs(pc),a6
  11.     movea.l    (a6,d0.w),a6
  12.     jsr    (a6)
  13.     movem.l    (sp)+,d1-d7/a0-a6
  14.     rte
  15.  
  16. *---------------------------------------------------
  17. *
  18. *    SYSTEM 関係
  19. *
  20.  
  21. tr5_00:    *--------------------------------------------
  22.     *_CDC_VERSION    equ    $00
  23.     *
  24.     *    ・ドライバーのバージョンチェック
  25.     *
  26.     *    [引  数]    なし
  27.     *    [戻り値]    d0.l = $0101
  28.     *
  29.     move.l    #$0101,d0
  30.     rts
  31.  
  32. tr5_01:    *--------------------------------------------
  33.     *_CDC_INIT    equ    $01
  34.     *
  35.     *    ・CD 及び ドライバーの初期化をします。([CLR]キー同等)
  36.     *
  37.     *    [引  数]    なし
  38.     *    [戻り値]    なし
  39.     *
  40.     *        演奏中止し、モードもクリアします。ただし、プログラム
  41.     *        は残ります。
  42.     *
  43.     *    [参  考] CD-ROMに対し REZEROUNIT を送りますので多少時間のか
  44.     *        かる場合があります。割り込み中など処理を早くしたい場
  45.     *        合、_CDC_STOP を使用するといいでしょう。
  46.     *
  47.     jbsr    _ZeroUnit
  48.     jbsr    _CdcModeOn
  49.     clr.w    _AutoMode        *0:ノーマル 1:オート
  50.     clr.w    _RndMode        *0:ノーマル 1:ランダム
  51.     clr.w    _LEDVMOD
  52.     bsr    _FlgClrS
  53.     bra    tr5_exsub
  54.  
  55.  
  56. *---------------------------------------------------
  57. *
  58. *    ワークアドレスゲット 関係
  59. *
  60.  
  61.  
  62. tr5_02:    *--------------------------------------------
  63.     *_CDC_STAT    equ    $02
  64.     *
  65.     *    ・CDの現在の状態の書かれたアドレスを返す
  66.     *
  67.     *    [引  数]    なし
  68.     *    [戻り値]    d0.l = ワークアドレス
  69.     *
  70.     *        ( 0)    .dc.w    0;NoCD 1;SetCD
  71.     *        ( 2)    .dc.l    状態  0x11;演奏中,0x12;一時停止,0x13;停止
  72.     *        ( 6)    .dc.l    曲番号
  73.     *        (10)    .dc.l    演奏中の曲の経過時間 (MSF型)
  74.     *        (14)    .dc.l    CD絶対総 経過時間 (MSF型)
  75.     *        (18)    .dc.l    現在演奏曲のながさ (MSF型)
  76.     *        (22)    .dc.l    CD名アドレス
  77.     *        (26)    .dc.l    曲名アドレス
  78.     *        (30)    .dc.l    LED文字アドレス    -----以下LED部に表示される物
  79.     *        (34)    .dc.l    LED数値 曲番号
  80.     *        (38)    .dc.l    LED数値 1以上;プログラムナンバー
  81.     *                    0;表示無し -1;MAX= -2;INP=
  82.     *        (42)    .dc.l    LED数値 タイム (MSF型)
  83.     *        (46)    .dc.l    LEDの状態
  84.     *                    ┌bit 0 ■:停止
  85.     *                    │bit 1 >:再生
  86.     *                    │bit 2 ||:一時停止
  87.     *                   イズレカ│bit 3 >>:早送り
  88.     *                    └bit 4 <<:巻き戻し
  89.     *                    ┌bit 5 ⊂:オート
  90.     *                    └bit 6 ◯:リピート
  91.     *                      bit 7 R:ランダム
  92.     *                      bit 8 M:メモリー
  93.     *                     (bit 9 B:BGM)
  94.     *                     (bit31 RV:TIME REV)
  95.     *        (50)    .dc.b    入力されている数値(上)
  96.     *        (51)    .dc.b    入力されている数値(下)
  97.     *
  98.     *        表示LED文字アドレスは基本的に同じアドレスを返してく
  99.     *        る。内容が変わったかどうかは曲名アドレスを監視するこ
  100.     *        とで可能。
  101.     *
  102.     *    CDの現在の状態の書かれたアドレスを返します。アドレスは固定さ
  103.     *    れてますが、トラップの再更新されます。
  104.     *
  105.     *    LED数値 タイムは TIMEREV.モードになっていてもREV.される前の
  106.     *    数値がかえります。対応したい場合LEDの状態でチェック、計算し
  107.     *    てください。
  108.     *
  109.     *    [参 考] CDC.x の機能が停止ているばあい同じ値を返します。
  110.     *        (LED文字アドレスも0の時もあります。)
  111.     *        _CDC_POWER($35)でチェックしてください。
  112.     *
  113.     lea    _plyinf-2(pc),a0
  114.     lea    _CHARBUF(pc),a1    *決まりadd
  115.     move.l    a1,30(a0)    */
  116.     lea    _CdName(pc),a1
  117.     move.w    _CDIN(pc),d0 *tst
  118.     bne    @f
  119.     lea    NullStr(pc),a1
  120. @@:    move.l    a1,22(a0)
  121.     move.w    _CDIN(pc),(a0)
  122.     moveq    #$13,d1
  123.     moveq    #0,d0
  124.     move.w    _TrkNo(pc),d0
  125.     move.l    d0,6(a0)
  126.     beq    @f
  127.     moveq    #$11,d1
  128.     move.w    _PauseMode(pc),d0 *tst
  129.     beq    @f
  130.     moveq    #$12,d1
  131. @@:    move.l    d1,2(a0)
  132.     move.l    a0,d0
  133.     rts
  134. NullStr:
  135.     .dc.b    0,0
  136.     .even
  137.  
  138. tr5_03:    *--------------------------------------------
  139.     *_CDC_TRACKS    equ    $03
  140.     *
  141.     *    ・CD-DAのCDの総合時間、曲数、曲の演奏時間、曲名の書かれたアドレスを返す
  142.     *
  143.     *    [引  数]    なし
  144.     *    [戻り値]    d0.l = 曲名リストワークアドレス
  145.     *
  146.     *        ( 0)    .dc.w    0;NoCD 1;SetCD
  147.     *        ( 2)    .dc.l    CDC.xの最大記憶数(以下,記憶数)
  148.     *        ( 6)    .dc.l    CDの曲数
  149.     *        (10)    .dc.l    CDの全演奏時間
  150.     *        (14)    .dc.l    CDCLISTにあったか -1ならあった
  151.     *        (18)    .dcb.b    40,0        CD名        40-1文字
  152.     *        (58)    .dsb.b    (記憶数)*40    各曲の名前    40-1文字
  153.     *            .dsb.l    (記憶数)    各曲の演奏時間+拡張曲名flag
  154.     *            .dsb.l    (記憶数)    各曲のスタート時間
  155.     *                        (最上位ビットが立って入れば データトラック)
  156.     *
  157.     *        CD名、曲名以外の書き替えを禁止。名の最後は必ず0を付ける
  158.     *
  159.     lea    _CdcTrak-2(pc),a0
  160.     move.w    _CDIN(pc),(a0)
  161.     move.l    a0,d0
  162.     rts
  163.  
  164.  
  165. *---------------------------------------------------
  166. *
  167. *    外部コントロール用 関係
  168. *
  169.  
  170.  
  171. tr5_04:    *--------------------------------------------
  172.     *_CDC_SCSI_CHK    equ    $04
  173.     *
  174.     *    ・SCSIの状態を返します。
  175.     *
  176.     *    [引  数]    なし
  177.     *    [戻り値]    d0.l = 0 ; 使用可能
  178.     *                 < 0 ; 使用不可
  179.     *
  180.     *        TRAP #5でSCSIを使用するもの場合このコールでチェックしてか
  181.     *        ら使用してください。
  182.     *
  183.     bsr    ScsiUseChk
  184.     beq    @f
  185.     moveq    #-1,d0        *    bne    :つかえない
  186.     rts
  187. @@:
  188.     moveq    #0,d0        *    beq    :使える
  189.     rts
  190.  
  191. tr5_05:    *--------------------------------------------
  192.     *_CDC_RELED    equ    $05
  193.     *
  194.     *    ・LED部の書き書き直しをします。数値入力のキャンセルも行います。
  195.     *
  196.     *    [引  数]    なし
  197.     *    [戻り値]    なし
  198.     *
  199.     *        LEDの書き直しを行います。TRAP #5 でCDC.xを操作した場合
  200.     *        すぐにLED部(_CDC_STAT のワークも含む)に表れないもの
  201.     *        があります。TIMER-Cが生きている場合一秒以内には書き
  202.     *        直されますが、このコールを使えばすぐに書き直されます。
  203.     *
  204.     *        また、入力された数値のキャンセルも行います。
  205.     *
  206.     *    [参 考] CDCコール番号の $1? はすぐに書き直されるようになって
  207.     *        ます。
  208.     *
  209.     bra    _B_KLE_D
  210.  
  211. tr5_06:    *--------------------------------------------
  212.     rts
  213.  
  214.  
  215. *---------------------------------------------------
  216. *
  217. *    キーコントロール 関係
  218. *
  219.  
  220.  
  221. tr5_07:    *--------------------------------------------
  222.     *_CDC_INKEY    equ    $07
  223.     *
  224.     *    ・CDCのキー割り込みルーチンを呼びます
  225.     *
  226.     *    [引  数]    d1.b = キーボードコード
  227.     *    [戻り値]    なし
  228.     *
  229.     *        キーボードのコードを送ることでCDCをコントロールします。
  230.     *
  231.     *┌─┐┌─┐                  ┌─┬─┬─┐┌─┬─┬─┬─┐
  232.     *│  ││  │            ─┬──┐│  │  │  ││  │記│登│  │
  233.     *└─┘└─┘            ─┴──┘└━┴━┴━┘└━┴─┴─┴─┘
  234.     *┌─┬─┬            ─┬──┐┌─┬─┬─┐┌─┬─┬─┬─┐
  235.     *│ES│  │              │ BS ││HM│  │DL││CL│/│*│-│
  236.     *├─┴┬┴  ┬┴┬┴┬     ┬┴┬┴──┤├─┼━┼─┤├─┼─┼─┼─┤
  237.     *│ TAB│    │E│R│     │[゚│    ││RU│RD│UN││7│8│9│+│
  238.     *├──┼    ┴┬┴┬┴     ┴┬┴┐ CR │├─┼─┼─┤├─┼─┼─┼─┤
  239.     *│                  │]ム│    ││  │↑│  ││4│5│6│=│
  240.     *                  ┴┬┴──┤│←├─┤→│├─┼─┼─┼─┤
  241.     *                │    ││  │↓│  ││1│2│3│  │
  242.     *                ┴┬──┘├─┴┬┴─┤├─┼─┼─┤EN│
  243.     *                  │      │    │    ││0│,│.│  │
  244.     *                ━┘      └──┴──┘└─┴─┴─┴─┘
  245.     *
  246.     *┌─┐┌─┐                  ┌─┬─┬─┐┌─┬─┬─┬─┐
  247.     *│  ││  │            ─┬──┐│  │  │  ││  │52│53│  │
  248.     *└─┘└─┘            ─┴──┘└━┴━┴━┘└━┴─┴─┴─┘
  249.     *┌─┬─┬            ─┬──┐┌─┬─┬─┐┌─┬─┬─┬─┐
  250.     *│01│  │              │ 0F ││36│  │37││3F│40│41│42│
  251.     *├─┴┬┴  ┬┴┬┴┬        ┬┴┬┴──┤├─┼━┼─┤├─┼─┼─┼─┤
  252.     *│ 10 │    │13│14│        │1C│    ││38│39│3A││43│44│45│46│
  253.     *├──┼    ┴┬┴┬┴        ┴┬┴┐ 1D │├─┼─┼─┤├─┼─┼─┼─┤
  254.     *│                  │29│    ││  │3C│  ││47│48│49│4A│
  255.     *                  ┴┬┴──┤│3B├─┤3D│├─┼─┼─┼─┤
  256.     *                │    ││  │3E│  ││4B│4C│4D│  │
  257.     *                ┴┬──┘├─┴┬┴─┤├─┼─┼─┤4E│
  258.     *                  │      │    │    ││4F│50│51│  │
  259.     *                ━┘      └──┴──┘└─┴─┴─┴─┘
  260.     *
  261.     *            $3F    [CLR]    = CDC.x初期化
  262.     *            $4E    [ENT]    = 演奏
  263.     *            $4A    [=]    = PAUSE/RESUME
  264.     *            $42/$46    [-][+]    = 巻戻し/早送り
  265.     *            $38    [R-UP]    = 1曲戻し *
  266.     *            $39    [R-DN]    = 1曲送り
  267.     *            $3A    [UNDO]    = リピートモード
  268.     *
  269.     *        などキー操作と同じ。他に
  270.     *
  271.     *            $52    [記号入力]= 数値入力キャンセル。LEDの初期化にもなる
  272.     *                        (CDC_RELEDと同じ機能です。)
  273.     *
  274.     *        があります(キー操作では出来ないようになってます)。
  275.     *
  276.     *
  277.     *        演奏開始の場合等、他のコールと違うのは入力されている数
  278.     *        値に影響される点です。もしこのコールだけで指定の曲演奏
  279.     *        したい場合、まず、数値キーコードを送ってから演奏すれば
  280.     *        可能です。
  281.     *
  282.     *        [-][+](サーチキー)を使う場合は、連続で送ったあと、最後
  283.     *        に 0 を送ってください。この時サーチ先から演奏されます。
  284.     *
  285.     *        $38は連続でコマンドを送ったりすることで動作が違うので
  286.     *        単純に、曲の頭から、1曲戻すと言う場合 _CDC_MVPLAY($13)
  287.     *        を使用してください。
  288.     *
  289.     move.l    d1,d0    *d0=キーボードコード
  290.     beq    @f
  291.     move.w    #1,KeySnsEM
  292.      bsr    KeySns
  293.     clr.w    KeySnsEM
  294.     rts
  295. @@:    move.l    _SeekNow(pc),d0 *tst
  296.     bmi    @f
  297.     move.w    #1,KeySnsEM
  298.      bsr    NokeySeek2
  299.     clr.w    KeySnsEM
  300. @@:    rts
  301.  
  302.  
  303. *---------------------------------------------------
  304. *
  305. *    プログラム関係
  306. *
  307.  
  308.  
  309. tr5_08:    *--------------------------------------------
  310.     *_CDC_PROG    equ    $08
  311.     *
  312.     *    ・CDCのプログラムワークアドレスを返す
  313.     *
  314.     *    [引  数]    なし
  315.     *    [戻り値]    d0.l = メモリワークアドレス
  316.     *
  317.     *        ( 0)    .dc.w    プログラム数
  318.     *        ( 2)    .ds.b    100,曲ナンバー
  319.     *
  320.     *        プログラムの直接書き替えも可能。ただし、書き替えたあと
  321.     *        もう一度_CDC_PROGをコールすること
  322.     *
  323.     *        プログラムを全部消去したい場合、プログラム数を0
  324.     *        に書き替えることで出来ます。
  325.     *
  326.     moveq    #0,d0
  327.     bsr    _MemChkT
  328.     lea    _MemLong(pc),a0
  329.     move.l    a0,d0
  330.     rts
  331.  
  332. tr5_09:    *--------------------------------------------
  333.     *_CDC_PROGIN    equ    $09
  334.     *
  335.     *    ・指定曲ナンバーをプログラムに記憶します
  336.     *
  337.     *    [引  数]    d1.l = 曲ナンバー
  338.     *                 = -1 ; 現在プログラムされている数のみ返す
  339.     *            d2.l = プログラムナンバー (0~)
  340.     *                 = -1 ;プログラムの最後に追加します ([.])
  341.     *    [戻り値]    d0.l = 現在プログラムされている数 ; 正常終了
  342.     *                 < 0 ; エラー(プログラム100を越える)
  343.     *
  344.     tst.l    d1
  345.     bmi    tr5_09E    *d1=-1
  346.     tst.l    d2
  347.     bmi    tr5_09M
  348.     cmpi.l    #100,d2
  349.     bcs    @f
  350.     moveq    #-1,d0    *d2がおかしい
  351.     rts
  352. @@:
  353.     lea    _MemSock(pc),a1
  354.     move.b    d1,0(a1,d2.w)
  355.     bra    tr5_09E
  356. tr5_09M:
  357.         *d2=-1
  358.     move.w    _MemLong(pc),d0
  359.     cmpi.w    #99,d0
  360.     bcs    @f
  361.     moveq    #-1,d0    *これ以上はいらない
  362.     rts
  363. @@:
  364.     lea    _MemSock(pc),a1
  365.     move.b    d1,0(a1,d0.w)
  366.     addq.w    #1,_MemLong
  367. tr5_09E:
  368.     bsr    _MemChkT
  369.     moveq    #0,d0
  370.     move.w    _MemLong(pc),d0
  371.     rts
  372.  
  373. tr5_0a:    *--------------------------------------------
  374.     *_CDC_PROGOUT    equ    $0A
  375.     *
  376.     *    ・最後のプログラムの曲をプログラムから消します
  377.     *
  378.     *    [引  数]    なし
  379.     *    [戻り値]    d0.l = 現在プログラムされている数 ; 正常終了
  380.     *                 < 0 ; エラー
  381.     *
  382.     move.w    _MemLong(pc),d0 *tst
  383.     bne    @f
  384.     moveq    #-1,d0
  385.     rts
  386. @@:    subq.w    #1,_MemLong        *メモリながさ 0以外ならMEMORY
  387.     bsr    _MemChkT
  388.     moveq    #0,d0
  389.     rts
  390.  
  391. tr5_0b:    *--------------------------------------------
  392. tr5_0c:    *--------------------------------------------
  393. tr5_0d:    *--------------------------------------------
  394. tr5_0e:    *--------------------------------------------
  395.     rts
  396.  
  397. tr5_0f:    *--------------------------------------------
  398.     *_CDC_PROGTIME    equ    $0F
  399.     *
  400.     *    ・プログラムされた曲の総演奏時間を計算します
  401.     *
  402.     *    [引  数]    なし
  403.     *    [戻り値]    d0.l = ワークアドレス
  404.     *                 < 0 ; エラー
  405.     *        ( 0)    .dc.l    演奏予定総長さ
  406.     *        ( 4)    .dc.l    演奏された曲の合計長さ
  407.     *
  408.     *        プログラムされて曲の合計と演奏された曲の合計長さ
  409.     *        を返します。ただし、演奏されていない時は0,0が
  410.     *        かえります。
  411.     *        演奏中にプログラムの変更があると数値がおかしくな
  412.     *        ることがあります(変更されない)
  413.     *
  414.     *    [参 考]ランダム演奏時にも、ノーマル時にも有効。
  415.     *
  416.     move.l    #tr5_0fwrk,-(sp)
  417.     jbsr    _ProgTimeCalc
  418.     addq.l    #4,sp
  419.     move.l    #tr5_0fwrk,d0
  420.     rts
  421. tr5_0fwrk:
  422.     .dc.l    0
  423.     .dc.l    0
  424.  
  425. *---------------------------------------------------
  426. *
  427. *    演奏関係
  428. *
  429.  
  430.  
  431. tr5_10:    *--------------------------------------------
  432.     *_CDC_PLAY    equ    $10
  433.     *
  434.     *    ・曲ナンバー指定によりノーマル演奏開始
  435.     *
  436.     *    [引  数]    d1.l = 開始曲ナンバー (0ならCDC管理演奏)
  437.     *            d2.l = 終了曲ナンバー (-1なら最後まで)
  438.     *    [戻り値]    d0.l = 0 ; 正常終了
  439.     *                 < 0 ; エラー
  440.     *
  441.     clr.w    _PauseMode    *0:特に 1:ポーズ中
  442.     clr.w    _ReptMode    *0:ノーマル 1:リピート
  443.     clr.w    _BgmMode    *0:ノーマル 1:BGM
  444.  
  445.     tst.l    d1
  446.     bne    @f
  447.     bsr    _ChkCdRom
  448.     bsr    Tent_sub
  449.     bra    tr5_exsub
  450.  
  451. @@:    move.l    d2,-(sp)
  452.     move.l    d1,-(sp)
  453.      bsr    _ChkCdRom
  454.     bsr    _CdPlay
  455.     addq    #8,sp
  456.     tst.l    d0
  457.     bpl    @f
  458.     rts
  459. @@:
  460.     moveq    #0,d0
  461.     bra    tr5_exsub
  462.  
  463. tr5_11:    *--------------------------------------------
  464.     *_CDC_PAUSE    equ    $11
  465.     *
  466.     *    ・CD演奏の一時停止。演奏していない場合何もしません。
  467.     *
  468.     *    [引  数]    なし
  469.     *    [戻り値]    なし
  470.     *
  471.     bsr    _ChkCdRom
  472.     bsr    _StpDsk
  473.     move.w    #-1,_PauseMode    *0:特に 1:ポーズ中
  474.     bra    tr5_exsub
  475.  
  476. tr5_12:    *--------------------------------------------
  477.     *_CDC_RESUME    equ    $12
  478.     *
  479.     *    ・CD演奏の一時停止の解除。演奏中は何もしません。
  480.     *
  481.     *    [引  数]    なし
  482.     *    [戻り値]    なし
  483.     *
  484.     bsr    _ChkCdRom
  485.     bsr    _Resume
  486.     clr.w    _PauseMode    *0:特に 1:ポーズ中
  487.     bra    tr5_exsub
  488.  
  489. tr5_13:    *--------------------------------------------
  490.     *_CDC_MVPLAY    equ    $13
  491.     *
  492.     *    ・CD演奏の曲を変えます
  493.     *
  494.     *    [引  数]    d1.l = 現在演奏中の曲からの ±値 (-1~1)
  495.     *    [戻り値]    d0.l = 0 ; 正常終了
  496.     *                 < 0 ; エラー
  497.     *
  498.     *        0を指定することで演奏中の曲を最初から。
  499.     *        プログラムされている場合、プログラム順に曲を移動、演奏します。
  500.     *        ランダムモード時は、どの曲にいくか判りません。
  501.     *
  502.     clr.w    _PauseMode    *0:特に 1:ポーズ中
  503.     move.l    d1,-(sp)
  504.      bsr    _ChkCdRom
  505.     bsr    _CdPlay_restart
  506.     addq    #4,sp
  507.     bra    tr5_exsub
  508.  
  509. tr5_14:    *--------------------------------------------
  510.     *_CDC_BGM    equ    $14
  511.     *
  512.     *    ・指定アドレス間を繰り返し演奏します
  513.     *
  514.     *    [引  数]    d1.l = 開始トラックor開始アドレス
  515.     *            d2.l = 終了アドレス(0ならその曲の最後の数値)
  516.     *            d3.l = ループアドレス(0ならd1と同じ値に)
  517.     *            d4.l = ループ終了アドレス(0ならd2と同じ値に)
  518.     *    [戻り値]    d0.l = 0 ; 正常終了
  519.     *                 < 0 ; エラー
  520.     *
  521.     *        d1.lは$100未満であればトラック指定になります。
  522.     *        d1.lが$100以上であればアドレス指定になります。
  523.     *
  524.     *        _CDC_MODE の戻り値が bit4;BGMが立ちます
  525.     *
  526.     *    [参  考] 基本的に BGMとして CD を使う場合のコールなので
  527.     *        LED部にBGMモードとは表示されません。
  528.     *        使う場合、キーボードからのコントロールを殺したほう
  529.     *        がいいでしょう。
  530.     *                ZCDC.x で使用してます。
  531.     *
  532.     clr.w    _PauseMode        *0:特に 1:ポーズ中
  533.     tst.l    d3
  534.     bne    @f
  535.     move.l    d1,d3
  536. @@:
  537.     tst.l    d4
  538.     bne    @f
  539.     move.l    d2,d4
  540. @@:
  541.     move.l    d3,_BgmStAdds
  542.     move.l    d4,_BgmEdAdds
  543.     move.l    d2,-(sp)
  544.     move.l    d1,-(sp)
  545.      bsr    _ChkCdRom
  546.      bsr    _FlgClrS
  547.      clr.w    _AutoMode        *0:ノーマル 1:オート
  548.      clr.w    _RndMode        *0:ノーマル 1:ランダム
  549.     bsr    _CdPlay
  550.     addq    #8,sp
  551.     tst.l    d0
  552.     bpl    @f
  553.     rts
  554. @@:
  555.     move.w    #-1,_BgmMode        *0:ノーマル 1:BGM
  556.     bsr    _MemChkT
  557.     moveq    #0,d0
  558.     bra    tr5_exsub
  559.  
  560. tr5_15:    *--------------------------------------------
  561.     *_CDC_STOP    equ    $15
  562.     *
  563.     *    ・CD演奏を停止します。
  564.     *
  565.     *    [引  数]    なし
  566.     *    [戻り値]    なし
  567.     *
  568.     *        _CDC_INIT に比べ高速です。割り込み中など処理が止まる
  569.     *        のを避けたい場合のみ使用してください。CDC.x内部では
  570.     *        停止になりますが、CD-ROM自体の状態は一時停止になりま
  571.     *        す。また、LEDの書き替えもすぐに行われません。
  572.     *
  573.     bsr    _ChkCdRom
  574.     bsr    _StpDsk
  575.     clr.w    _AutoMode        *0:ノーマル 1:オート
  576.     clr.w    _RndMode        *0:ノーマル 1:ランダム
  577.     bsr    _FlgClrS
  578.     bra    tr5_exsub
  579.  
  580. tr5_16:    *--------------------------------------------
  581. tr5_17:    *--------------------------------------------
  582. tr5_18:    *--------------------------------------------
  583. tr5_19:    *--------------------------------------------
  584. tr5_1a:    *--------------------------------------------
  585. tr5_1b:    *--------------------------------------------
  586. tr5_1c:    *--------------------------------------------
  587. tr5_1d:    *--------------------------------------------
  588. tr5_1e:    *--------------------------------------------
  589. tr5_1f:    *--------------------------------------------
  590. tr5_20:    *--------------------------------------------
  591. tr5_21:    *--------------------------------------------
  592. tr5_22:    *--------------------------------------------
  593. tr5_23:    *--------------------------------------------
  594. tr5_24:    *--------------------------------------------
  595. tr5_25:    *--------------------------------------------
  596. tr5_26:    *--------------------------------------------
  597. tr5_27:    *--------------------------------------------
  598. tr5_28:    *--------------------------------------------
  599. tr5_29:    *--------------------------------------------
  600. tr5_2a:    *--------------------------------------------
  601. tr5_2b:    *--------------------------------------------
  602. tr5_2c:    *--------------------------------------------
  603. tr5_2d:    *--------------------------------------------
  604. tr5_2e:    *--------------------------------------------
  605. tr5_2f:    *--------------------------------------------
  606.     rts
  607.  
  608.  
  609. *---------------------------------------------------
  610. *
  611. *    CDC DRIVE MODE 関係
  612. *
  613.  
  614.  
  615. tr5_30:    *--------------------------------------------
  616.     *_CDC_DRIVE    equ    $30
  617.     *
  618.     *    ・CDCの心臓を動かす TIMER-Cを乗っ取っていると、CDCが動きません。
  619.     *     が、直接ある一定期でこれをコールすれば大丈夫です。
  620.     *
  621.     *    [引  数]    なし
  622.     *    [戻り値]    なし
  623.     *
  624.     *    [参 考] MUTERMモード対応にも対応してます。が気にすることはないで
  625.     *        しょう。
  626.     *
  627.     move.w    _ScscUse(pc),d0 *tst
  628.     beq    @f
  629.     rts
  630. @@:    move.w    $0a0e.w,d1        *現在処理中のIOCSコール番号(なければ-1)
  631.     cmpi.w    #$F5,d1
  632.     bne    @f
  633.     rts
  634. @@:    move.w    MuTmMod(pc),d0 *tst    *0:ノーマル 1:強引にキーベクタを書き替え
  635.     bne    @f
  636.      bsr    LoopChk_
  637.     rts
  638.  
  639. @@:            *MUTERMモード
  640.     move.l    MFP_BAK(pc),d0 *tst
  641.     bne    tr5_30L
  642.     move.l    MFP_,d1
  643.     cmp.l    #MFP,d1
  644.     beq    @f
  645.     move.l    MFP_JMP+2(pc),MFP_BAK
  646.     move.l    MFP_,MFP_JMP+2
  647.     move.l    #MFP2,MFP_
  648. @@:    bra    tr5_30E
  649. tr5_30L:
  650.     move.l    MFP_,d1
  651.     cmp.l    #MFP2,d1
  652.     beq    @f
  653.     move.l    MFP_BAK(pc),MFP_JMP+2
  654.     move.l    #MFP,MFP_
  655.     clr.l    MFP_BAK
  656. @@:    *bra    tr5_30E
  657.  
  658. tr5_30E
  659.     move.w    MFP_cmd(pc),d0 *tst
  660.     bne    @f
  661.     bsr    NokeySeek
  662.     bra    tr5_30EE
  663. @@:
  664.     move.w    #1,IocsSwc
  665.     move.w    MFP_cmd(pc),d0
  666.     move.w    MFP_cmd+2(pc),MFP_cmd
  667.     clr.w    MFP_cmd+2
  668.     bsr    KeySns
  669. tr5_30EE:
  670.     bsr    LoopChk
  671.     clr.w    IocsSwc
  672.     rts
  673.  
  674. MFP2:    bra    MFP
  675.  
  676.  
  677. tr5_31:    *--------------------------------------------
  678.     *_CDC_MODE    equ    $31
  679.     *
  680.     *    ・CDCの演奏モードを設定(トグル)
  681.     *
  682.     *    [引  数]    d1.l = モード
  683.     *                 =  0 ; オート
  684.     *                 =  1 ; リピート
  685.     *                 =  2 ; ランダム
  686.     *                 = -1 ; モードののみ返す
  687.     *    [戻り値]    d0.l = 現在のモード ; 正常終了
  688.     *        現在のモードは
  689.     *                bit0 :オート
  690.     *                bit1 :リピート
  691.     *                bit2 :ランダム
  692.     *                bit3 :メモリー
  693.     *                [bit4 :BGM]
  694.     *
  695.     *        設定は _CDC_INKEY($7)でそれぞれのキーコードを、
  696.     *        送った時を同じ処理をします(ただし入力数字は無視
  697.     *        されます)ので、場合によリ演奏開始されます。
  698.     *
  699.     *        モード変更はトグルで行われるので一度モードを調
  700.     *        べてから設定したほうがいいでしょう。
  701.     *
  702.     move.l    d1,-(sp)
  703.     moveq    #0,d0
  704.     move.w    _AutoMode(pc),d1    *0:ノーマル 1:オート
  705.     beq    @f
  706.     ori.w    #%00001,d0
  707. @@:    move.w    _ReptMode(pc),d1    *0:ノーマル 1:リピート
  708.     beq    @f
  709.     ori.w    #%00010,d0
  710. @@:    move.w    _RndMode(pc),d1        *0:ノーマル 1:ランダム
  711.     beq    @f
  712.     ori.w    #%00100,d0
  713. @@:    move.w    _MemLong(pc),d1        *メモリながさ 0以外ならMEMORY
  714.     beq    @f
  715.     ori.w    #%01000,d0
  716. @@:    move.w    _BgmMode(pc),d1        *0:ノーマル 1:BGM
  717.     beq    @f
  718.     ori.w    #%10000,d0
  719. @@:
  720.     move.l    (sp)+,d1
  721.     bpl    @f
  722.     rts
  723. @@:    move.l    d0,-(sp)
  724.     subq.w    #1,d1
  725.     bpl    @f
  726.         *0*
  727.     clr.w    _DisSuuzi10        * LED用数字クリア
  728.     bsr    Tauto        *オート
  729.     bra    tr5_31E
  730. @@:
  731.     bne    @f
  732.         *1*
  733.     clr.w    _DisSuuzi10        * LED用数字クリア
  734.     bsr    Tundo        *リピート
  735.     bra    tr5_31E
  736. @@:
  737.     subq.w    #1,d1
  738.     bne    @f
  739.         *2*
  740.     bsr    Trnd        *ランダム
  741.     *bra    tr5_31E
  742. @@:
  743. tr5_31E:
  744.     move.l    (sp)+,d0
  745.     rts
  746.  
  747. tr5_32:    *--------------------------------------------
  748.     *_CDC_KEYMODE    equ    $32
  749.     *
  750.     *    ・CDCのキー操作関係のモードを設定
  751.     *
  752.     *    [引  数]    d1.l = モード
  753.     *                 0 ; 一切受け付けない (-KS)
  754.     *                 1 ; 受け付ける
  755.     *                -1 ; 現在のモードのみ返す
  756.     *    [戻り値]    d0.l = 前のモード ; 正常終了
  757.     moveq    #0,d0
  758.     move.w    _KeySwi(pc),d0        *1;キー入力可能 0;不可能
  759.     tst.l    d1
  760.     bpl    @f
  761.     rts
  762. @@:
  763.     move.w    d1,_KeySwi
  764.     rts
  765.  
  766. tr5_33:    *--------------------------------------------
  767.     *_CDC_LED    equ    $33
  768.     *
  769.     *    ・CDCのLEDの表示モードを設定する
  770.     *
  771.     *    [引  数]    d1.l =  0 ; 表示モード
  772.     *                    1 ; 非表示モード
  773.     *                 = -1 ; 現在の値
  774.     *    [戻り値]    d0.l = 前のモード ; 正常終了
  775.     *                 < 0 ; エラー
  776.     *
  777.     *        表示モードにしてもTEXTが使われていると表示されません
  778.     *
  779.     *    [参 考] Trapコールで強制LED表示モードはありません
  780.     *
  781.     moveq    #0,d0
  782.     move.w    _DisMode(pc),d0
  783.     andi.l    #$01,d0
  784.     tst.l    d1
  785.     bpl    @f
  786.     rts
  787. @@:
  788.     bne    @f
  789.     clr.w    _DisMode    *0:表示
  790.     rts
  791. @@:
  792.     move.l    d0,-(sp)
  793.     bsr    FnkBerChk
  794.     beq    @f
  795.     bsr    KillLeds
  796. @@:    move.l    (sp)+,d0
  797.     move.w    #1,_DisMode    *1:非表示
  798.     rts
  799.  
  800.     rts
  801.  
  802. tr5_34:    *--------------------------------------------
  803.     *_CDC_TIMING    equ    $34
  804.     *
  805.     *    ・CDチェックする間隔設定(基本的に使用禁止)
  806.     *
  807.     *    [引  数]    d1.l =  1s単位
  808.     *                 = -1 ; 現在の値
  809.     *    [戻り値]    d0.l = 前の値(単位1/10s) ; 正常終了
  810.     *                 < 0 ; エラー
  811.     *
  812.     *        間隔チェックにはIOCSのTIMER-Cのワークを見ているので
  813.     *        TIMER-Cを変更している場合、意味がありません。
  814.     *
  815.     *    [参 考] デバグ用なので使用する意味はありません。
  816.     *
  817.     moveq    #0,d0
  818.     move.w    _KeyTDCT(pc),d0
  819.     tst.l    d1
  820.     bpl    @f
  821.     rts
  822. @@:
  823.     mulu    #10,d1
  824.     tst.w    d1
  825.     bne    @f
  826.     moveq    #-1,d0
  827.     rts
  828. @@:    move.w    d1,_KeyTDCT
  829.     rts
  830.  
  831. tr5_35:    *--------------------------------------------
  832.     *_CDC_POWER    equ    $35
  833.     *
  834.     *    ・CDC の機能を制御
  835.     *
  836.     *    [引  数]    d1.l =  1 ; 機能する
  837.     *                 =  0 ; 停止する ([ESC])
  838.     *                 = -1 ; 現在の値
  839.     *    [戻り値]    d0.l = 前の値 ; 正常終了
  840.     *                 < 0 ; エラー
  841.     *
  842.     *        機能を停止しても trap#5での操作も可能ですが、
  843.     *        _CDC_DRIVE を常用する必要があります。
  844.     *
  845.     moveq    #0,d0
  846.     move.w    _CdcMode(pc),d0
  847.     andi.l    #$01,d0
  848.     tst.l    d1
  849.     bpl    @f
  850.     rts
  851. @@:
  852.     jbne    _CdcModeOn
  853. @@:
  854.     move.l    d0,-(sp)
  855.     bsr    FnkBerChk
  856.     beq    @f
  857.     bsr    KillLeds
  858. @@:    move.l    (sp)+,d0
  859.     clr.w    _CdcMode    *0:停止中
  860.     clr.w    _CDIN        *0:CDは入っていない 1:入っている
  861.     clr.b    _CHARBUF    *LED文字
  862.     rts
  863.  
  864. tr5_36:    *--------------------------------------------
  865.     *_CDC_TRACKMODE    equ    $36
  866.     *
  867.     *    ・トラック記憶モードを変えます(演奏も停止します)。
  868.     *
  869.     *    [引  数]    d1.l =  0 ; タイトルリストファイルを参照、
  870.     *                 拡張トラック設定
  871.     *                 =  1 ; 拡張トラック設定解除
  872.     *    [戻り値]    なし
  873.     *
  874.     *        タイトルリストファイルからの登録を行います。タイトル
  875.     *        リストファイルを変更した時これを実行すれば読み込んで
  876.     *        くれます
  877.     *
  878.     *    [参 考] d1.l==1 は主にZCDC.xで使用します。普通の音楽演奏の場合
  879.     *        は意味がないでしょう。
  880.     *
  881.     tst.l    d1
  882.     bne    @f
  883.     jbsr    _ZeroUnit
  884.     clr.w    _AutoMode        *0:ノーマル 1:オート
  885.     clr.w    _RndMode        *0:ノーマル 1:ランダム
  886.     bsr    _FlgClrS
  887.     bsr    _ChkCdRom
  888.     bsr    _CdListRead
  889.     rts
  890. @@:
  891.     jbsr    _ZeroUnit
  892.     clr.w    _AutoMode        *0:ノーマル 1:オート
  893.     clr.w    _RndMode        *0:ノーマル 1:ランダム
  894.     bsr    _FlgClrS
  895.     bsr    _CdListSub
  896.     rts
  897.  
  898. tr5_37:    *--------------------------------------------
  899.     *_CDC_KEYCANSEL    equ    $37
  900.     *
  901.     *    ・CDCのキー操作無効を個別に設定
  902.     *
  903.     *    [引  数]    d1.l = 無効にするキーボードコード
  904.     *                 = -1 ; もとに戻す
  905.     *    [戻り値]    なし
  906.     *
  907.     *    アプリでキーボードからのコントロールが困る物がある場合、特定
  908.     *    のキーのみ無効に出来ます。アプリ終了時もとに戻すこと。
  909.     *
  910.     *    [参 考] スイッチ -B[n]でもとに戻すことが可能です。
  911.     *
  912.     tst.l    d1
  913.     bpl    tr5_31L
  914.     move.l    CmdC_ListD(pc),CmdC_List
  915.     move.l    CmdC_ListD+4(pc),CmdC_List+4
  916.     move.l    CmdC_ListD+8(pc),CmdC_List+8
  917.     move.l    CmdC_ListD+12(pc),CmdC_List+12
  918.     rts
  919. tr5_31L:
  920.     move.l    d1,d0
  921.     andi.l    #$FFFF_FF80,d0
  922.     beq    @f
  923.     rts    **エラー
  924. @@:    move.w    d1,d0
  925.     lsr.w    #3,d0
  926.     lea    CmdC_List(pc),a0
  927.     bclr.b    d1,(a0,d0.w)
  928.     rts
  929.  
  930. tr5_38:    *--------------------------------------------
  931. tr5_39:    *--------------------------------------------
  932. tr5_3a:    *--------------------------------------------
  933. tr5_3b:    *--------------------------------------------
  934. tr5_3c:    *--------------------------------------------
  935. tr5_3d:    *--------------------------------------------
  936. tr5_3e:    *--------------------------------------------
  937. tr5_3f:    *--------------------------------------------
  938.     rts
  939.  
  940. tr5_exsub:
  941.     move.l    d0,-(sp)
  942.     clr.w    _DisSuuzi10    * LED用数字クリア
  943.     bsr    FncBarC
  944.     bsr    FncBar2
  945.     bsr    FncBar
  946.     clr.w    _LEDVMOD
  947.     move.l    (sp)+,d0
  948.     rts
  949.  
  950. *---------------------------------------------------
  951. *
  952. *    CDC ERROR CORDS
  953. *
  954. *
  955. * -1    ; 
  956. * -2    ; Play Audio Begin ・ Play Audio Block Count Command error'演奏できない'
  957. * -3    ; Start Track Address or ReadTOC Command error'演奏できない'
  958. * -4    ; 指定された曲番号は、存在しない
  959. * -5    ; Leadout Track Address or ReadTOC Command error
  960. * -100    ; CD-ROM でない 準備されていない
  961.  
  962. *
  963. *    戻り値としてd0が使われていなくても破壊されます.
  964. *
  965. *
  966.  
  967.  
  968.